﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TMS.formularios
{
    public partial class UIabmAplicacion : System.Web.UI.Page
    {
        //Almacena el nombre de la aplicacion que se carga de lstAplicaciones para su uso en algun posible cambio.
        static string nombreApp = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                limpiarForm(); // Limpia los controles del formulario.
                loadAppList(); // Carga la lista de aplicaciones con las que estan almacenadas en el sistema.
            }
        }

        protected void btnCrearAplicacion_Click(object sender, EventArgs e)
        {
            lblAdvertencia.Text = "";
            if (!Dios.getInstancia().existeApp(txtNombre.Text))
            {
                string aNom = txtNombre.Text;
                string aDesc = txtDescripcion.Text;
                if (Dios.getInstancia().getAppByName(aNom) == null)
                {
                    Dios.getInstancia().regAplicacion(aNom, aDesc);
                    loadAppList();
                }
                limpiarForm();
            }
            else
            {
                lblAdvertencia.Text = "Ya existe una aplicacion con ese nombre registrada en el sistema...";
            }
        }
        public void limpiarForm()
        {
            /*Limpia los controles del formulario*/
            lblId.Text = "";
            txtNombre.Text = "";
            txtDescripcion.Text = "";
            /*Desabilita los botones de modificar, y eliminar aplicacion.*/
            btnModificarAplicacion.Enabled = false;
            btnEliminarAplicacion.Enabled = false;
        }
       
        public void loadAppList()
        {
            lstAplicaciones.Items.Clear(); // Borra el contenido de la lista de aplicaciones disponibles.
            foreach (Aplicacion ap in Dios.getInstancia().listarApps())
            {
                ListItem l = new ListItem(ap.ToString(), "" + ap.Id);
                lstAplicaciones.Items.Add(l);
            }
            lstAplicaciones.SelectedIndex = -1;
        }

        protected void lstAplicaciones_SelectedIndexChanged(object sender, EventArgs e)
        {
            /* 
             * Carga una instancia de Aplicacion con el resultado de la busqueda de la aplicacion seleccionada
             * en el listbox por el Id de la misma.
             * Luego asigna los valores de los atributos de dicha instancia a los controles del formulario.
             */ 
            Aplicacion ap = Dios.getInstancia().getAppById(long.Parse(lstAplicaciones.SelectedValue));
            if (ap != null)
            {
                limpiarForm();
                lblId.Text = "" + ap.Id;
                txtNombre.Text = ap.Nombre;
                //Carga la variable nombreApp con el nombre de la aplicacion seleccionada.
                nombreApp = ap.Nombre;
                txtDescripcion.Text = ap.Descripcion;
                /* Habilita los botones de Modificar y Eliminar*/
                btnModificarAplicacion.Enabled = true;
                btnEliminarAplicacion.Enabled = true;
            }
        }

        protected void btnModificarAplicacion_Click(object sender, EventArgs e)
        {
            /* Carga en variables el contenido de los controles del formulario y los asigna como atributos
             * a una instancia de Aplicacion. 
             * Luego se lo envia al metodo de modificacion de aplicacion de la clase controladora.
             * 
             * Se verifica que si el nombre de la aplicacion se cambio, no exista el nuevo nombre en el registro del sistema,
             * 
             */
            lblAdvertencia.Text = "";
            if ((txtNombre.Text != nombreApp && !Dios.getInstancia().existeApp(txtNombre.Text)) || txtNombre.Text == nombreApp)
            {
                long id = long.Parse(lblId.Text);
                string nom = txtNombre.Text;
                string des = txtDescripcion.Text;
                Dios.getInstancia().modAplicacion(id, nom, des);
                limpiarForm();
                loadAppList();
            }
            else
            {
                lblAdvertencia.Text = "Ya existe una aplicacion con ese nombre registrada en el sistema...";
            }
        }

        protected void txtNombre_TextChanged(object sender, EventArgs e)
        {
            
        }

        protected void txtDescripcion_TextChanged(object sender, EventArgs e)
        {
            
        }

        protected void btnEliminarAplicacion_Click(object sender, EventArgs e)
        {
            /*
             * Carga una variable con el Id de la aplicacion que se desea eliminar
             * y se le envia al metodo correspondiente de la clase controladora.
             */ 
            long? id = long.Parse(lstAplicaciones.SelectedValue);
            if (id != null)
            {
                Dios.getInstancia().removeAplicacion((long)id);
            }
            /* Recarga la lista de aplicaciones */
            loadAppList();
            limpiarForm();
        }
    }
}